home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / program / skeleton.zip / CmdFile.asm < prev    next >
Assembly Source File  |  1996-06-02  |  3KB  |  171 lines

  1.         TITLE    CmdFile - Handle file commands from WndProc
  2.         INCLUDE    COMMON.INC
  3.  
  4. hWnd        TEXTEQU    <[ebp+08h]>
  5. uMsg        TEXTEQU    <[ebp+0Ch]>
  6. wParam        TEXTEQU    <[ebp+10h]>
  7. lParam        TEXTEQU    <[ebp+14h]>
  8.  
  9.  
  10.         .CONST
  11. szFilter    SBYTE    "Text Files (*.TXT)",0h,"*.TXT",0h
  12.         SBYTE    "All Files (*.*)",0h,"*.*",0h,0h
  13. szDefExt    SBYTE    "txt",0h
  14.  
  15.  
  16.         .DATA
  17. ofn        OPENFILENAME <SIZEOF(OPENFILENAME), NULL, NULL,\
  18.                 OFFSET szFilter, NULL, NULL, 1h,\
  19.                 OFFSET szFile, MAX_PATH,\
  20.                 OFFSET szFileTitle, MAX_PATH,\
  21.                 NULL, NULL, 0h, 0h, 0h,\
  22.                 OFFSET szDefExt, 0h, 0h, 0h>
  23. szSaveChanges    SBYTE    "Save changes to the following file?",0Ah,0Ah
  24. szFile        SBYTE    MAX_PATH DUP (0h)
  25.  
  26.  
  27.         .DATA?
  28. hFile        HANDLE    ?
  29. fFileStatus    DWORD    ?        ;see COMMON.INC for EQUs
  30.  
  31. szFileTitle    SBYTE    MAX_PATH DUP (?)
  32.  
  33.  
  34.         .CODE
  35. CmdIDM_NEW    PROC    STDCALL
  36.         call    SaveChanges
  37.         test    eax,eax
  38.         jz    caseRETURN
  39.  
  40.         ;!!!!    !!!!!!!!
  41.  
  42.         mov    DWORD PTR szFile,"itnU"    ;Untitled
  43.         mov    DWORD PTR szFile[4h],"delt"
  44.         xor    eax,eax
  45.         mov    DWORD PTR szFile[8h],eax
  46.         mov    ofn.nFileOffset,ax
  47.         mov    ofn.nFileExtension,9h
  48.         and    fFileStatus,NOT NAMEDbit
  49.         and    fFileStatus,NOT CHANGEDbit
  50.         call    NewWindowName
  51.  
  52. caseRETURN:    ret
  53. CmdIDM_NEW    ENDP
  54.  
  55.  
  56. CmdIDM_OPEN    PROC    STDCALL
  57.         call    SaveChanges
  58.         test    eax,eax
  59.         jz    caseRETURN
  60.  
  61.         mov    eax,hMainWnd
  62.         mov    ofn.hwndOwner,eax
  63.         mov    ofn.Flags,OFN_PATHMUSTEXIST + OFN_FILEMUSTEXIST
  64.         INVOKE    GetOpenFileName, ADDR ofn
  65.         test    eax,eax
  66.         jz    caseCANCEL
  67.  
  68.         ;!!!!    !!!!!!!!
  69.  
  70.         or    fFileStatus,NAMEDbit
  71.         and    fFileStatus,NOT CHANGEDbit
  72.         call    NewWindowName
  73.  
  74.         mov    eax,TRUE    ;return TRUE
  75.         jmp    caseRETURN
  76.  
  77. caseERROR:    INVOKE    GetLastError
  78.  
  79.         ;!!!!    !!!!!!!!
  80.  
  81. caseCANCEL:    xor    eax,eax        ;return FALSE
  82.  
  83. caseRETURN:    ret
  84. CmdIDM_OPEN    ENDP
  85.  
  86.  
  87. CmdIDM_SAVE    PROC    STDCALL
  88.         test    fFileStatus,NAMEDbit    ;Does the file need a name?
  89.         jnz    caseSAVE
  90.  
  91.         mov    eax,hMainWnd        ;Get file name
  92.         mov    ofn.hwndOwner,eax
  93.         mov    ofn.Flags, OFN_HIDEREADONLY + OFN_OVERWRITEPROMPT
  94.  
  95.         INVOKE    GetSaveFileName, ADDR ofn
  96.         test    eax,eax
  97.         jz    caseCANCEL
  98.  
  99. caseSAVE:
  100.         ;!!!!    !!!!!!!!
  101.  
  102.         or    fFileStatus,NAMEDbit
  103.         and    fFileStatus,NOT CHANGEDbit
  104.         call    NewWindowName
  105.  
  106.         mov    eax,TRUE    ;return TRUE to continue
  107.         jmp    caseRETURN
  108.  
  109. caseERROR:    INVOKE    GetLastError
  110.  
  111.         ;!!!!    !!!!!!!!
  112.         
  113. caseCANCEL:    xor    eax,eax        ;return FALSE to CANCEL NEW or CLOSE
  114.  
  115. caseRETURN:    ret
  116. CmdIDM_SAVE    ENDP
  117.  
  118.  
  119. SaveChanges    PROC    STDCALL
  120.         mov    eax,IDNO
  121.  
  122.         test    fFileStatus,CHANGEDbit
  123.         jz    caseIDNO
  124.  
  125.         INVOKE    MessageBox, hMainWnd, ADDR szSaveChanges, ADDR szClassName,\
  126.             MB_YESNOCANCEL + MB_ICONWARNING
  127.         cmp    eax,IDYES
  128.         je    caseIDYES
  129.         cmp    eax,IDCANCEL
  130.         je    caseIDCANCEL
  131.  
  132. caseIDNO:    mov    eax,TRUE
  133.         jmp    caseRETURN    ;return TRUE to continue
  134.  
  135. caseIDCANCEL:    xor    eax,eax        ;return FALSE to CANCEL
  136.         jmp    caseRETURN
  137.  
  138. caseIDYES:    call    CmdIDM_SAVE    ;returns FALSE to CANCEL or TRUE to continue
  139.  
  140. caseRETURN:    ret
  141. SaveChanges    ENDP
  142.  
  143.  
  144. NewWindowName    PROC    STDCALL USES ESI EDI
  145.         mov    esi,OFFSET szFile
  146.         xor    eax,eax
  147.         mov    ax,ofn.nFileOffset
  148.         add    esi,eax            ;copy filename only
  149.         xor    ecx,ecx
  150.         mov    cx,ofn.nFileExtension
  151.         sub    ecx,eax            ;do not show extension
  152.         mov    edi,OFFSET szWindowName
  153.         rep movsb
  154.  
  155.         dec    edi            ;add changed status
  156.         test    fFileStatus,CHANGEDbit
  157.         jz    @F
  158.         mov    BYTE PTR [edi],"*"
  159.         inc    edi
  160. @@:        mov    DWORD PTR [edi],"  - "    ;add application name
  161.         add    edi,3h
  162.         mov    esi,OFFSET szClassName
  163.         mov    ecx,9h
  164.         rep movsb
  165.  
  166.         INVOKE    SetWindowText, hWnd, ADDR szWindowName
  167.  
  168.         ret
  169. NewWindowName    ENDP
  170.  
  171.         END